#ifndef SCENEMANAGER
#define SCENEMANAGER

#include <vector>
#include "Engine/EngineConfig.hpp"
#include "Engine/Renderer/Shader.hpp"

namespace red {
	class Renderer;
	class Camera;
	class Device;
	class Text;
	class VAO;

	class REDAPI SceneManager {
	public:
		SceneManager();
		~SceneManager();

		void Init(Device* pDevice);

		/// \brief Render all currently stored drawable objects
		void RenderAll();

		// Camera
			Camera* AddCamera(const Vector3F &pPosition = Vector3F::ZERO, const std::string &pName = "Camera1", f32 pSpeed = 10.f, f32 pRPM = 10.f);
			void HandleCameraInputs();
			Camera* GetActiveCamera() const { return mActiveCamera; }

		// Texts (rendered with SFML, not OpenGL)
			Text* AddText(const std::string &pText, const Vector2I &pPosition, const Color &pColor = Color::Black, s16 pSize = 15, bool pBold = false, bool pItalic = false);

		// VAO 
			void AddVAO(VAO* pVao);

		Shader s1;
	private:
		Device* mDevice;

		Camera* mActiveCamera;
		
		Color mAmbientLight;

		// Current Frame Texts to render
		std::vector<Text*>	mTextList;

		//VAO List
		std::vector<VAO*>	mVAOList;
	};
}
#endif